数据结构(C++语言版)实现顺序栈的创建,初始化,赋值随机数,入栈,出栈,获取栈顶元素,输出
1.栈:
栈是一种运算受限的线性表,是一种先进后出的数据结构,限定只能在一端进行插入和删除操作,允许操作的一端称为栈顶,不允许操作的称为栈底
2.顺序栈(顺序结构):
栈的顺序存储结构简称为顺序栈
它类似于线性表的顺序存储结构,是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素
通常用一维数组来实现栈的顺序存储,一般以数组小下标一端做栈底,每进栈一个元素,指针top+1,每出栈一个元素,top-1
3.图示:
空栈 存有数据的顺序栈
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201112145652324.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIwMTg1NzM3,size_16,color_FFFFFF,t_70#pic_center)
4.代码块
顺序栈的定义
typedef struct{
//top指针指向栈顶
SElemType *top;
//base指针指向栈底
SElemType *base;
//顺序栈的大小
int stackSize;
}SqStack;
顺序栈的初始化
//顺序栈S初始化
Status InitStack(SqStack &S){
//动态分配一个SElemType类型MAXSIZE长度的空间
//将地址给顺序栈S的栈底指针
S.base = new SElemType[MAXSIZE];
//判断,若顺序栈的栈底指针(S.base)为空,没有地址,则没有分配成功
if(!S.base) return ERROR;
//空的顺序栈,所以栈顶指针=栈底指针
S.top=S.base;
// 空的顺序栈,由MAXSIZE个空间可以存
S.stackSize = MAXSIZE;
return OK;
}
顺序栈进栈
//进栈,将e压入顺序栈S中
Status push(SqStack &S,SElemType e){
//判断栈是否满栈
if(S.top-S.base==S.stackSize) return ERROR;
//将e存入S.top,存入栈顶,栈顶指针top++向上移动
*S.top++=e;
return OK;
}
顺序栈出栈
//出栈,将栈顶元素给e
Status pop(SqStack &S,SElemType &e){
//判断栈内是否有元素,为空栈
if(S.top==S.base) return ERROR;
//栈顶指针下移,将栈顶元素赋给e
e=*--S.top;
return OK;
}
取栈顶元素
//取栈顶元素 ,赋值给e
Status GetTop(SqStack S,SElemType &e){
//判断栈内是否有元素,为空栈
if(S.top==S.base) return ERROR;
//返回栈顶元素的值,栈顶指针不变
e=*(S.top-1);
return OK;
}
遍历输出栈元素
//输出栈元素
Status printStack(SqStack S){
SElemType *p=S.base;
while(p!=S.top){
cout
//判断是否栈满
if(S.top-S.base==S.stackSize) return ERROR;
*S.top++=rand();
}
return OK;
}
5.代码实现
#include
#include
using namespace std;
#define ERROR 0
#define OK 1
#define MAXSIZE 100
typedef int SElemType;
typedef int Status;
typedef struct{
//top指针指向栈顶
SElemType *top;
//base指针指向栈底
SElemType *base;
//顺序栈的大小
int stackSize;
}SqStack;
//创建空的顺序栈 S
Status InitStack(SqStack &S){
//动态分配一个SElemType类型MAXSIZE长度的空间
//将地址给顺序栈S的栈底指针
S.base = new SElemType[MAXSIZE];
//判断,若顺序栈的栈底指针(S.base)为空,没有地址,则没有分配成功
if(!S.base) return ERROR;
//空的顺序栈,所以栈顶指针=栈底指针
S.top=S.base;
// 空的顺序栈,由MAXSIZE个空间可以存
S.stackSize = MAXSIZE;
return OK;
}
//入栈,将e压入顺序栈S中
Status push(SqStack &S,SElemType e){
//判断栈是否满栈
if(S.top-S.base==S.stackSize) return ERROR;
//将e存入S.top,存入栈顶,栈顶指针top++向上移动
*S.top++=e;
return OK;
}
//出栈,将栈顶元素给e
Status pop(SqStack &S,SElemType &e){
//判断栈内是否有元素,为空栈
if(S.top==S.base) return ERROR;
//栈顶指针下移,将栈顶元素赋给e
e=*--S.top;
return OK;
}
//取栈顶元素 ,赋值给e
Status GetTop(SqStack S,SElemType &e){
//判断栈内是否有元素,为空栈
if(S.top==S.base) return ERROR;
//返回栈顶元素的值,栈顶指针不变
e=*(S.top-1);
return OK;
}
//输出栈元素
Status printStack(SqStack S){
SElemType *p=S.base;
while(p!=S.top){
cout
//判断是否栈满
if(S.top-S.base==S.stackSize) return ERROR;
*S.top++=rand();
}
return OK;
}
int main(){
//定义栈S
SqStack S;
int e;
// 顺序栈初始化
InitStack(S);
//为顺序栈赋值
cout |